home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / programming / gui / eagui30.lha / EAGUI / Modula2 / txt / TextField.mod < prev   
Encoding:
Modula Implementation  |  1994-12-01  |  4.1 KB  |  169 lines

  1. (* REVISION HEADER ×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××× *
  2.    
  3.  | $VER: TextField.imp 3.00 (23.11.94) by Stefan Schulz [sts]
  4.  
  5.  | Desc: Example of implementing custom images using EAGUI
  6.  
  7.  | Dist: This Module is © Copyright 1994 by Stefan Schulz
  8.  
  9.  | Rqrs: Amiga OS 2.0 or higher
  10.  |       EAGUI.library V3
  11.  |       EAGUI - Environment Adaptive Graphic User Interface
  12.  |       Copyright © 1993, 1994 by Marcel Offermans and Frank Groen
  13.  
  14.  | Lang: M2Amiga
  15.  | Trns: M2Amiga Modula 2 Software Development System
  16.  |       © Copyright by A+L AG, CH-2540 Grenchen
  17.  
  18.  | Hist: Version \date\
  19.  |
  20.  |       3.00   \23.11.94\
  21.  |              adapted to EAGUI.library V3
  22.  |
  23.  |       1.00   \01.05.94\
  24.  |              initial Version
  25.  
  26.  * ×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××× *)
  27.  
  28. IMPLEMENTATION MODULE TextField;
  29.  
  30. (*$ DEFINE    Small:= FALSE
  31.  
  32.     IF    Small
  33.     StackChk   := FALSE
  34.     RangeChk   := FALSE
  35.     OverflowChk:= FALSE
  36.     NilChk     := FALSE
  37.     EntryClear := FALSE
  38.     CaseChk    := FALSE
  39.     ReturnChk  := FALSE
  40.     LargeVars  := FALSE
  41.     ENDIF            *)
  42.  
  43. (* IMPORTS ********************************************************************** *)
  44.  
  45. IMPORT    d    : EAGuiD,
  46.     l    : EAGuiL;
  47.  
  48. IMPORT    gd    : GraphicsD,
  49.     id    : IntuitionD,
  50.     il    : IntuitionL,
  51.     R,
  52.     S    : SYSTEM,
  53.     ud    : UtilityD;
  54.  
  55. (* ****************************************************************************** *)
  56.  
  57. (* GLOBALS ====================================================================== *)
  58.  
  59. VAR    IText        := id.IntuiText{frontPen:1, drawMode:gd.jam1};
  60.  
  61. (* ============================================================================== *)
  62.  
  63. (* MinSize Method --------------------------------------------------------------- *)
  64.  
  65. PROCEDURE MethMinSizeTextField
  66.             ( hook{R.A0}    : ud.HookPtr;
  67.               obj{R.A2}    : S.ADDRESS;
  68.               msg{R.A1}    : S.ADDRESS    ) : S.ADDRESS;
  69.  
  70.  VAR    minWidth,
  71.     minHeight    : LONGCARD;
  72.     tf        : ciTextFieldPtr;
  73.  
  74.  (*$ SaveA4:= TRUE *)
  75.  
  76.  BEGIN
  77.  
  78.  S.SETREG( R.A4, hook^.data );
  79.  
  80.  (* get a pointer to our structure, and check if we actually got it *)
  81.  tf:= S.CAST(ciTextFieldPtr, l.GetAttr(obj, d.userData));
  82.  
  83.  IF    (tf # NIL)
  84.   THEN    (* now, we use the library to determine the dimensions of the string *)
  85.     minWidth := l.TextLength(tf^.textAttr, tf^.string, "\o");
  86.     minHeight:= l.TextHeight(tf^.textAttr);
  87.     
  88.     (* and finally, we set these values *)
  89.     IGNORE l.SetAttr(obj, d.minWidth, minWidth);
  90.     IGNORE l.SetAttr(obj, d.minHeight, minHeight);
  91.   END; (* if *)
  92.  
  93.  RETURN NIL;
  94.  
  95.  END MethMinSizeTextField;
  96.  
  97.  
  98. (* Render Method ---------------------------------------------------------------- *)
  99.  
  100. PROCEDURE MethRenderTextField
  101.             ( hook{R.A0}    : ud.HookPtr;
  102.               obj{R.A2}    : S.ADDRESS;
  103.               msg{R.A1}    : S.ADDRESS    ) : S.ADDRESS;
  104.  
  105.  VAR    tf        : ciTextFieldPtr;
  106.     minWidth,
  107.     minHeight,
  108.     width, height,
  109.     left, top    : LONGCARD;
  110.     rm        : d.RenderMessagePtr;
  111.     buffer        : ARRAY [1..10] OF LONGINT;
  112.     tagList        : ud.TagItemPtr;
  113.  
  114.  (*$ SaveA4:= TRUE *)
  115.  
  116.  BEGIN
  117.  
  118.  S.SETREG( R.A4, hook^.data );
  119.  
  120.  rm:= S.CAST(d.RenderMessagePtr, msg);
  121.  
  122.  (* get a pointer to our structure, and check if we actually got it *)
  123.  tf:= S.CAST(ciTextFieldPtr, l.GetAttr(obj, d.userData));
  124.  
  125.  IF    (tf # NIL)
  126.   THEN    (* get sizes of the object *)
  127.     tagList:= S.TAG(buffer,
  128.             d.minWidth,    0,
  129.             d.minHeight,    0,
  130.             d.width,    0,
  131.             d.height,    0,
  132.           ud.tagEnd);
  133.     buffer[2]:= S.ADR(minWidth);
  134.     buffer[4]:= S.ADR(minHeight);
  135.     buffer[6]:= S.ADR(width);
  136.     buffer[8]:= S.ADR(height);  
  137.     
  138.     IGNORE l.GetAttrsA(obj,tagList);
  139.     
  140.     (* get offsets of object relative to root (window) *)
  141.     left:= l.GetObjectLeft(rm^.rootPtr, obj);
  142.     top := l.GetObjectTop(rm^.rootPtr, obj);
  143.     
  144.     (* now align the object *)
  145.     IF    (citfAlignRight IN tf^.flags)
  146.      THEN    INC(left, width - minWidth);
  147.      ELSIF    ~(citfAlignLeft IN tf^.flags)
  148.       THEN    INC(left, (width - minWidth) / 2);
  149.      END; (* if *)
  150.     
  151.     IF (citfAlignBottom IN tf^.flags)
  152.      THEN    INC(top, height - minHeight)
  153.      ELSIF    ~(citfAlignTop IN tf^.flags)
  154.       THEN    INC(top, (height - minHeight) / 2);
  155.      END; (* if *)
  156.     
  157.     (* and finally render it *)
  158.     IText.iTextFont:= tf^.textAttr;
  159.     IText.iText    := tf^.string;
  160.     IText.frontPen := tf^.frontPen;
  161.     il.PrintIText(rm^.rastportPtr, S.ADR(IText), left, top);
  162.   END; (* if *)
  163.  
  164.  RETURN NIL;
  165.  
  166.  END MethRenderTextField;
  167.  
  168. END TextField.imp
  169.